//package com.example.chatgptapplication.controller.test;
//
//
//import com.baidubce.qianfan.model.chat.ChatRequest;
//import com.example.chatgptapplication.entity.deepseek.DeepSeekRequest;
//import com.fasterxml.jackson.databind.JsonNode;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.http.HttpHeaders;
//import org.springframework.http.MediaType;
//import org.springframework.messaging.simp.SimpMessagingTemplate;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RestController;
//import org.springframework.web.reactive.function.client.WebClient;
//import reactor.core.publisher.Flux;
//
//import java.util.ArrayList;
//import java.util.List;
//
//@RestController
//public class testController2 {
//    @Autowired
//    private SimpMessagingTemplate messagingTemplate;
//
//
//    public Flux<String> streamDeepSeekResponse(String userMessage, String apiKey) {
//        // 1. 构建请求头
//        HttpHeaders headers = new HttpHeaders();
//        headers.setContentType(MediaType.APPLICATION_JSON);
//        headers.setBearerAuth(apiKey);
//
//        // 2. 构建流式请求体
//        DeepSeekRequest request = new DeepSeekRequest();
//        request.setModel("deepseek-chat");
//        List<DeepSeekRequest.Message> messages = new ArrayList<>();
//        messages.add(new DeepSeekRequest.Message("user", userMessage));
//        request.setMessages(messages);
//        request.setStream(true); // 关键：开启流式模式
//
//        // 3. 创建WebClient实例
//        WebClient webClient = WebClient.create(apiUrl);
//
//        // 4. 发送流式请求
//        return webClient.post()
//                .uri(apiUrl)
//                .headers(httpHeaders -> httpHeaders.addAll(headers))
//                .bodyValue(request)
//                .accept(MediaType.TEXT_EVENT_STREAM) // 接受SSE流
//                .retrieve()
//                .bodyToFlux(String.class)
//                .map(this::parseStreamResponse)
//                .onErrorResume(e -> {
//                    // 错误处理逻辑
//                    return Flux.error(new RuntimeException("Stream error: " + e.getMessage()));
//                });
//    }
//
//    // 流式响应解析方法
//    private String parseStreamResponse(String chunk) {
//        try {
//            // 假设响应格式为SSE（data: {...}）
//            if (chunk.startsWith("data: ")) {
//                String json = chunk.substring(6).trim();
//                ObjectMapper mapper = new ObjectMapper();
//                JsonNode node = mapper.readTree(json);
//
//                // 提取内容
//                if (node.has("choices")) {
//                    JsonNode choices = node.get("choices");
//                    if (choices.isArray() && choices.size() > 0) {
//                        return choices.get(0)
//                                .path("delta")
//                                .path("content")
//                                .asText("");
//                    }
//                }
//            }
//            return "";
//        } catch (Exception e) {
//            throw new RuntimeException("Failed to parse stream chunk", e);
//        }
//    }
//
//
//    @PostMapping("/chat-stream")
//    public void handleStreamChat(@RequestBody ChatRequest request) {
//        streamDeepSeekResponse(request.getMessage(), request.getApiKey())
//                .subscribe(
//                        chunk -> {
//                            // 通过WebSocket发送每个数据块
//                            messagingTemplate.convertAndSendToUser(
//                                    request.getSessionId(),
//                                    "/queue/chat-stream",
//                                    new ChatResponse(chunk)
//                            );
//                        },
//                        error -> {
//                            messagingTemplate.convertAndSendToUser(
//                                    request.getSessionId(),
//                                    "/queue/errors",
//                                    new ErrorResponse("Stream error")
//                            );
//                        }
//                );
//    }
//
//
//}
